/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager.editar;

import br.com.deployment.entidade.acesso.Grupo;
import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.message.Msg;
import br.com.deployment.servico.GrupoServico;
import br.com.deployment.servico.UsuarioServico;
import br.com.deployment.utilitario.Login;
import br.com.deployment.utilitario.Sexo;
import java.io.IOException;
import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.model.DualListModel;

/**
 *
 * @author ronieresousa
 */
@ManagedBean
@SessionScoped
public class ManagerEditarUsuario  implements Serializable{

    @EJB
    UsuarioServico usuarioServico;
    @EJB
    GrupoServico grupoServico;
    
    private Login login;
    private Usuario usuario, userLogin;
    private Boolean status = Boolean.FALSE;
    private String senha, confirmar;
    private DualListModel<Grupo> dualGrupo;

    @PostConstruct
    public void init(){
         senha = new String();
         confirmar = new String();
         dualGrupo = new DualListModel<Grupo>();
    }

    public void redirect(String s, Usuario u) {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            usuario = new Usuario();
            usuario = u;
            List<Grupo> lst = grupoServico.findAll();
            lst.removeAll(usuario.getGrupos());
            dualGrupo = new DualListModel<Grupo>(lst, usuario.getGrupos());
            
            context.getExternalContext().redirect(s);
        } catch (IOException ex) {
            Logger.getLogger(ManagerEditarUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void editar() {
        usuario.setGrupos(dualGrupo.getTarget());
        usuarioServico.edit(usuario);
        Msg.messagemInfo("Usuario Atualizado com sucesso ");
    }

    public void redirectLogin(String s, Usuario u) {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            setStatus(Boolean.FALSE);
            login = new Login();
            userLogin = new Usuario();
            userLogin = u;
            System.out.println(status);

            context.getExternalContext().redirect(s);
        } catch (IOException ex) {
            Logger.getLogger(ManagerEditarUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void verificaSenha() {
        try {
            login.setSenhaCriptografada(Login.encryptPassword(login.getVerificaSenha()));

            if (login.getSenhaCriptografada().equals(userLogin.getSenha())) {
                setStatus(Boolean.TRUE);
            } else {
                setStatus(Boolean.FALSE);
                Msg.messagemWarn("Senha atual está incorreta");
            }
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(ManagerEditarUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void editarNovaSenha() {
        verificaSenha();
        if (getStatus()) {

            if (login.getSenha().equals(login.getConfirmaSenha())) {
                try {
                    login.setSenhaCriptografada(Login.encryptPassword(login.getSenha()));
                } catch (NoSuchAlgorithmException ex) {
                    Logger.getLogger(ManagerEditarUsuario.class.getName()).log(Level.SEVERE, null, ex);
                }
                 userLogin.setSenha(login.getSenhaCriptografada());
                 usuarioServico.edit(userLogin);
                Msg.messagemInfo("Senha atualizado com sucesso !");

            } else {
                Msg.messagemWarn("Senhas não conferem");
            }
        }
//      
    }

    public SelectItem[] selectItemSexo() {
        SelectItem[] items = new SelectItem[Sexo.values().length];
        int i = 0;
        for (Sexo sexo : Sexo.values()) {
            items[i++] = new SelectItem(sexo);
        }
        return items;
    }

    public DualListModel<Grupo> getDualGrupo() {
        return dualGrupo;
    }

    public void setDualGrupo(DualListModel<Grupo> dualGrupo) {
        this.dualGrupo = dualGrupo;
    }


    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    

    public Login getLogin() {
        return login;
    }

    public void setLogin(Login login) {
        this.login = login;
    }

    public Usuario getUserLogin() {
        return userLogin;
    }

    public void setUserLogin(Usuario userLogin) {
        this.userLogin = userLogin;
    }

    public Boolean getStatus() {
        return status;
    }

    public void setStatus(Boolean status) {
        this.status = status;
    }

    public String getConfirmar() {
        return confirmar;
    }

    public void setConfirmar(String confirmar) {
        this.confirmar = confirmar;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
}
